leaderboardApp.controller("gruposProductosCtrl", function($scope, $http, $timeout, notifier, httpPost) {
	$scope.loading = false;
	$scope.message = {title: "", text: "", type: "", visible: false};
	$scope.modalMessage = {title: "", text: "", type: "", visible: false};
	$scope.firstCall = true;
	
	$scope.editGPrdId = 0;
	$scope.editGPrdMode = false;
	$scope.gruposProductos = [];
	$scope.currentGrupoProducto = {};
	$scope.addGPrdData = {gPrdId: 0, name: "", prdQty: 0};
	$scope.productos = [];
	$scope.modalidades = [];
	$scope.modalidad = {};
	
	$scope.paginator = new Paginator();
	$scope.paginator.rowsPerPage = 5;
	
	$scope.grpPaginator = new Paginator();
	
	$scope.gPrdToUpload = {};
	
	$scope.getGruposProductos = function() {
		var params = {};
		params["page"] = $scope.grpPaginator.currentPage;
		params["rowsPerPage"] = $scope.grpPaginator.rowsPerPage;
		params["filter"] = $scope.grpPaginator.filter;
		if($scope.firstCall) {
			$scope.firstCall = false;
			params["refresh"] = true;
		}
		$scope.loading = true;
		httpPost.send($scope.message, "/Leaderboard/GruposProductosServlet/getGruposProductos", params, function(data) {
			if(data.code === 0) {
				$scope.gruposProductos = data.productGroups;
				$scope.grpPaginator.updateTotal(data.total);
			}
			$scope.loading = false;
		});
	};
	
	$scope.getGruposProductos();
	
	$scope.getProductos = function() {
		var params = {};
		params["page"] = $scope.paginator.currentPage;
		params["rowsPerPage"] = $scope.paginator.rowsPerPage;
		params["filter"] = $scope.paginator.filter;
		
		httpPost.send($scope.message, "/Leaderboard/GruposProductosServlet/getProductos", params, function(data) {
			$scope.productos = data.products;
			$scope.paginator.updateTotal(data.total);
		});
	};
	
	//$scope.getProductos();
	$scope.openImportDialog = function() {
		$("#cmbGprds").select2();
		$("#dlgImportProducts").modal("show");
	}
	
	$scope.addGrupoProducto = function() {
		$scope.editGPrdMode = false;
		$scope.addGPrdData = {gPrdId: 0, name: "", prdQty: 0};
		$scope.selectNonePrd();
		$("#dlgAddEditGPrd").modal("show");
	};
	
	$scope.editGrupoProducto = function(gPrd) {
		$scope.editGPrdMode = true;
		$scope.editGPrdId = gPrd.gPrdId;
		
		var params = {};
		params["page"] = $scope.paginator.currentPage;
		params["rowsPerPage"] = $scope.paginator.rowsPerPage;
		params["filter"] = $scope.paginator.filter;
		params["gprdId"] = gPrd.gPrdId;
		//$scope.selectNonePrd();
		httpPost.send($scope.message, "/Leaderboard/GruposProductosServlet/getDetalleGrupoProducto", params, function(data) {
			$scope.addGPrdData.name = gPrd.name;
			$scope.addGPrdData.prdQty = data.productQty;
			$scope.getProductos();
			for(var i=0; i<$scope.modalidades.length; i++) {
				if($scope.modalidades[i].codigo == data.modalidad) {
					$scope.modalidad = $scope.modalidades[i];
					$timeout(function() { $("#cmbModalidad").trigger("change"); }, 0, false);
					break;
				}
			}
		});
		
		$("#dlgAddEditGPrd").modal("show");
	};
	
	$scope.openGPrdDialog = function(opt, gPrd) {
		if(opt.indexOf("add") >= 0) {
			$scope.addGrupoProducto();
		} else {
			$scope.editGrupoProducto(gPrd);
		}
	};
	
	$scope.saveGrupoProducto = function() {
		$scope.loading = true;
		
		if($scope.editGPrdMode) {
			httpPost.send($scope.modalMessage, "/Leaderboard/GruposProductosServlet/updateGrupoProducto", {gPrdId: $scope.editGPrdId, nombre: $scope.addGPrdData.name, modalidad: $scope.modalidad.codigo}, function(data) {
				if(data.code === 0) {
					$("#dlgAddEditGPrd").modal("hide");
					notifier.notifySuccess($scope.message, "Ok", data.reason);
					$scope.addGPrdData = {gPrdId: 0, name: "", prdQty: 0};
					$scope.getGruposProductos();
				}
				$scope.loading = false;
			});
		} else {
			httpPost.send($scope.modalMessage, "/Leaderboard/GruposProductosServlet/addGrupoProducto", {nombre: $scope.addGPrdData.name, modalidad: $scope.modalidad.codigo}, function(data) {
				if(data.code === 0) {
					$("#dlgAddEditGPrd").modal("hide");
					notifier.notifySuccess($scope.message, "Ok", data.reason);
					$scope.addGPrdData = {gPrdId: 0, name: "", prdQty: 0};
					$scope.getGruposProductos();
				}
				$scope.loading = false;
			});
		}
	};
	
	$scope.delGrupoProducto = function(gPrdId) {
		if(confirm("Esta seguro que desea eliminar el grupo de productos con ID " + gPrdId + "?")) {
			$scope.loading = true;
			httpPost.send($scope.message, "/Leaderboard/GruposProductosServlet/delGrupoProducto", {"gPrdId": gPrdId}, function(data) {
				if(data.code === 0) {
					notifier.notifySuccess($scope.message, "Ok", data.reason);
					$scope.getGruposProductos();
				}
				$scope.loading = false;
			});
		}
	};
	
	$scope.selectAllPrd = function() {
		httpPost.send($scope.modalMessage, "/Leaderboard/GruposProductosServlet/selectProducto", {"prdId": "ALL", "select": "YES", "filter": $scope.paginator.filter}, function(data) {
			if(data.code === 0) {
				$scope.getProductos();
			}
		});
	};
	
	$scope.selectNonePrd = function() {
		httpPost.send($scope.modalMessage, "/Leaderboard/GruposProductosServlet/selectProducto", {"prdId": "ALL", "select": "NO", "filter": $scope.paginator.filter}, function(data) {
			if(data.code === 0) {
				$scope.getProductos();
			}
		});
	};
	
	$scope.toggleSelectPrd = function(prd) {
		httpPost.send($scope.modalMessage, "/Leaderboard/GruposProductosServlet/selectProducto", {"prdId": prd.id, "select": (prd.selected? "NO": "YES"), "filter": ""}, function(data) {
			
		});
	};
	
	$scope.updateQtyPrd = function(prd) {
		if(prd.qty != null) {
			httpPost.send($scope.modalMessage, "/Leaderboard/GruposProductosServlet/updateQtyProducto", {"prdId": prd.id, "qty": prd.qty}, function(data) {
				
			});
		}
	};
	
	$scope.getModalidades = function(prd) {
		httpPost.send($scope.modalMessage, "/Leaderboard/GruposProductosServlet/getModalidadesGruposProductos", {}, function(data) {
			$scope.modalidades = data.modalidades;
			if(data.modalidades.size > 0) {
				$scope.modalidad = $scope.modalidades[0];
			}
			$("#cmbModalidad").select2();
			$timeout(function() { $("#cmbModalidad").trigger("change"); }, 0, false);
		});
	};
	$scope.getModalidades();
	
	$scope.submitCargaProductos = function() {
		httpPost.send($scope.modalMessage, "/Leaderboard/GruposProductosServlet/setCurrentGprdId", {"gPrdId": $scope.gPrdToUpload.gPrdId}, function(data) {
			$("#importProductsForm").submit();
		});
	};
	
	
	/************************************** Funciones de Utilería **************************************/
	
	$scope.hideMessage = function() {
		notifier.hideNotif($scope.message);
		notifier.hideNotif($scope.modalMessage);
	};
	
	/************************************** ##################### **************************************/
});